﻿using System;
using System.IO;
using System.Web;

namespace Library.Util
{
    public class FileUtil
    {
        /// <summary>
        /// Dosyanın uzantısını verir.
        /// </summary>
        /// <param name="fileName">Dosya Adı</param>
        /// <returns>Dosya uzantısı</returns>
        public static string GetFileExtension(string fileName)
        {
            return Path.GetExtension(fileName);
        }

        /// <summary>
        /// Dosyanın adını verir
        /// </summary>
        /// <param name="fileName">Dosya Yolu</param>
        /// <returns>Dosya Adı</returns>
        public static string GetFileName(string fileName)
        {
            return Path.GetFileName(fileName);
        }

        /// <summary>
        /// Dosya adında kullanılamayacak karakterleri temizler.
        /// </summary>
        /// <param name="fileName">Dosya Adı</param>
        /// <returns>Kullanılmayan karakterler temizlenmiş dosya adı</returns>
        public static string SafeFileName(string fileName)
        {
            fileName = fileName.Replace("/", "");
            fileName = fileName.Replace("\\", "");
            fileName = fileName.Replace("?", "");
            fileName = fileName.Replace("%", "");
            fileName = fileName.Replace("*", "");
            fileName = fileName.Replace(":", "");
            fileName = fileName.Replace("|", "");
            fileName = fileName.Replace("\"", "");
            fileName = fileName.Replace("<", "");
            fileName = fileName.Replace(">", "");            
            return fileName;
        }

        /// <summary>
        /// GridView Exportlarında oluşturulacak dosya adını belirler.
        /// </summary>
        /// <param name="fileName">Dosya Adı/Gridview başlığı</param>
        /// <returns>Güvenli dosya adı</returns>
        public static string ExportFileName(string fileName)
        {
            string dosyaAdi = fileName;
            if (string.IsNullOrEmpty(dosyaAdi))
                dosyaAdi = IdGenerator.GenerateGuid();            
            return StringUtil.EscapeTurkishCharacters(SafeFileName(dosyaAdi));
        }

        /// <summary>
        /// Dosya Upload işlemi
        /// </summary>
        /// <param name="postedFile">Upload edilmek istenen dosya</param>
        /// <param name="filePath">Dosyanın kaydedileceği yol</param>
        /// <param name="extensionFilter">Dosya uzantı filtresi '|' karakteri ile ayrılır. Örn: .jpg|.gif</param>
        public static void Upload(HttpPostedFile postedFile, string filePath, string extensionFilter)
        {
            if (postedFile != null && postedFile.ContentLength > 0)
            {
                if (!Validation.ExtensionValidation(filePath, extensionFilter))                    
                    throw new Exception("Sadece " + extensionFilter.Replace("|", ", ") + " formatındaki dosyalar yüklenebilir.");
                
                try
                {
                    postedFile.SaveAs(filePath);
                }
                catch (Exception ex)
                {
                    throw new Exception("Dosya yüklenemedi.", ex);
                }
            }
        }        
    }
}